#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

/*
f(n,k) 表示整数n被拆分为最大不超过k的分拆数
*/
const int MOD=1e9+7;

int main(){
    freopen("in.txt","r",stdin);
    int N;
    cin >> N;
    while(N--){
        int n,m,k;
        cin >> n >> m >> k;
        int dp[2][k+10];
        memset(dp,0,sizeof(dp));
        //dp[i][j] 选i堆,和为j
        
        for(int i=1;i<=min(m,k);i++){
            dp[0][i]=1;
        }
        
        for(int i=1;i<n;i++){
            int row=(i&1),lastrow=(~i&1);
            memset(dp[row],0,sizeof(dp[row]));
            for(int j=1;j<=k;j++){
                for(int ii=1;j-ii>0&&ii<=m;ii++){         
                    dp[row][j]=(dp[row][j]+dp[lastrow][j-ii])%MOD;
                }
            }
        }
        cout << dp[(n-1)&1][k] <<endl;
    }
    
    
    return 0;
}